/**
 * Notes: 项目模型适配器 - 整合原始项目模型和增强版项目模型
 * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux0730 (wechat)
 * Date: 2024-03-10 19:30:00 
 */

const BaseModel = require('../config/models_config').base_model;
const BaseProjectModel = require('./base_project_model.js');
const util = require('../../../framework/helpers/util.js');
const timeUtil = require('../../../framework/helpers/time_util.js');
const dataUtil = require('../../../framework/helpers/data_util.js');
const config = require('../../../config/config.js');

// 导入原始项目模型（保留原有功能）
const OriginalProjectModel = require('./project_model.js');

// 导入增强版项目模型（获取新数据结构）
const ProjectModelEnhanced = require('./project_model_enhanced.js');

/**
 * 项目模型适配器
 * 此适配器保留了原有项目模型的所有函数功能，同时引入了增强版项目模型的数据结构
 */
class ProjectModelAdapter extends BaseModel {

    constructor() {
        super();

        // 与研发项目模型区分，这里设置为普通项目集合名称
        this._collection = BaseProjectModel.C('oa_project');
    }

    /**
     * 获取集合名称
     * @returns {string} 集合名称
     */
    static getCollectionName() {
        return BaseProjectModel.C('oa_project');
    }

    // 增强版数据结构
    static get DB_STRUCTURE() {
        return ProjectModelEnhanced.DB_STRUCTURE;
    }

    // 字段前缀
    static get FIELD_PREFIX() {
        return "PROJECT_";
    }

    // 类型常量
    static get TYPE() {
        return ProjectModelEnhanced.TYPE;
    }

    static get TYPE_DESC() {
        return ProjectModelEnhanced.TYPE_DESC;
    }

    // 状态常量
    static get STATUS() {
        return ProjectModelEnhanced.STATUS;
    }

    static get STATUS_DESC() {
        return ProjectModelEnhanced.STATUS_DESC;
    }

    // 优先级常量
    static get PRIORITY() {
        return ProjectModelEnhanced.PRIORITY;
    }

    static get PRIORITY_DESC() {
        return ProjectModelEnhanced.PRIORITY_DESC;
    }

    // 以下是从原始项目模型中继承的方法

    /**
     * 获取项目列表
     * @param {Object} param0 查询参数
     * @returns 项目列表
     */
    static async getProjectList(params) {
        return await OriginalProjectModel.getProjectList(params);
    }

    /**
     * 插入项目数据
     * @param {Object} data 项目数据
     * @returns 插入结果
     */
    static async insert(data) {
        return await OriginalProjectModel.insert(data);
    }

    /**
     * 更新项目数据
     * @param {string} id 项目ID
     * @param {Object} data 更新数据
     * @returns 更新结果
     */
    static async update(id, data) {
        return await OriginalProjectModel.update(id, data);
    }

    /**
     * 获取项目详情
     * @param {string} id 项目ID
     * @returns 项目详情
     */
    static async getProjectDetail(id) {
        return await OriginalProjectModel.getProjectDetail(id);
    }

    /**
     * 删除项目
     * @param {string} id 项目ID
     * @returns 删除结果
     */
    static async deleteProject(id) {
        return await OriginalProjectModel.deleteProject(id);
    }

    // 其他方法根据需要从OriginalProjectModel中转发
}

/**
 * 使用说明：
 * 1. 在现有代码中，可以不做任何修改，继续使用 project_model.js
 * 2. 在新开发的模块中，可以使用本适配器，获得增强的数据结构功能
 * 
 * 引用方式：
 * const ProjectModelAdapter = require('../config/models_config').project_model;
 * 
 * 调用示例：
 * const projectList = await ProjectModelAdapter.getProjectList(params);
 * 
 * 注意：项目实际数据库集合仍然是同一个，只是模型定义有所不同
 */

module.exports = ProjectModelAdapter; 